package main

import "fmt"

// 闭包函数
// 闭包函数中 包含了 其外部作用域 的 变量
//
// 底层原理
// 1. 函数返回值
// 2. 变量查找顺序
func closure(x int) func(int) int {
	return func(i int) int {
		x += i
		return x
	}
}

func main() {
	f1 := closure(0)

	i := f1(1)
	fmt.Printf("i => %T %+v\n", i, i)

	i = f1(2)
	fmt.Printf("i => %T %+v\n", i, i)
}
